home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ntfs / volume.h < prev   
C/C++ Source or Header  |  2005-10-18  |  8KB  |  208 lines

  1. /*
  2.  * volume.h - Exports for NTFS volume handling. Part of the Linux-NTFS project.
  3.  *
  4.  * Copyright (c) 2000-2004 Anton Altaparmakov
  5.  * Copyright (c)      2005 Yura Pakhuchiy
  6.  *
  7.  * This program/include file is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU General Public License as published
  9.  * by the Free Software Foundation; either version 2 of the License, or
  10.  * (at your option) any later version.
  11.  *
  12.  * This program/include file is distributed in the hope that it will be
  13.  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  14.  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program (in the main directory of the Linux-NTFS
  19.  * distribution in the file COPYING); if not, write to the Free Software
  20.  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21.  */
  22.  
  23. #ifndef _NTFS_VOLUME_H
  24. #define _NTFS_VOLUME_H
  25.  
  26. #ifdef HAVE_CONFIG_H
  27. #include "config.h"
  28. #endif
  29.  
  30. #include <stdio.h>
  31. #ifdef HAVE_SYS_PARAM_H
  32. #    include <sys/param.h>
  33. #endif
  34. #ifdef HAVE_SYS_MOUNT_H
  35. #    include <sys/mount.h>
  36. #endif
  37. #ifdef HAVE_MNTENT_H
  38. #    include <mntent.h>
  39. #endif
  40.  
  41. /* Both under Cygwin and DJGPP we do not have MS_RDONLY, so we define it. */
  42. #if !defined(MS_RDONLY)
  43. typedef enum {
  44.     MS_RDONLY = 1,
  45. } MS_MOUNT;
  46. #endif
  47.  
  48. /* Forward declaration */
  49. typedef struct _ntfs_volume ntfs_volume;
  50.  
  51. #include "types.h"
  52. #include "support.h"
  53. #include "device.h"
  54. #include "inode.h"
  55. #include "attrib.h"
  56.  
  57. /*
  58.  * Flags returned by the ntfs_check_if_mounted() function.
  59.  */
  60. typedef enum {
  61.     NTFS_MF_MOUNTED        = 1,    /* Device is mounted. */
  62.     NTFS_MF_ISROOT        = 2,    /* Device is mounted as system root. */
  63.     NTFS_MF_READONLY    = 4,    /* Device is mounted read-only. */
  64. } ntfs_mount_flags;
  65.  
  66. extern int ntfs_check_if_mounted(const char *file, unsigned long *mnt_flags);
  67.  
  68. /*
  69.  * Defined bits for the state field in the ntfs_volume structure.
  70.  */
  71. typedef enum {
  72.     NV_ReadOnly,        /* 1: Volume is read-only. */
  73.     NV_CaseSensitive,    /* 1: Volume is mounted case-sensitive. */
  74.     NV_LogFileEmpty,    /* 1: $logFile journal is empty. */
  75. } ntfs_volume_state_bits;
  76.  
  77. #define  test_nvol_flag(nv, flag)     test_bit(NV_##flag, (nv)->state)
  78. #define   set_nvol_flag(nv, flag)      set_bit(NV_##flag, (nv)->state)
  79. #define clear_nvol_flag(nv, flag)    clear_bit(NV_##flag, (nv)->state)
  80.  
  81. #define NVolReadOnly(nv)         test_nvol_flag(nv, ReadOnly)
  82. #define NVolSetReadOnly(nv)          set_nvol_flag(nv, ReadOnly)
  83. #define NVolClearReadOnly(nv)        clear_nvol_flag(nv, ReadOnly)
  84.  
  85. #define NVolCaseSensitive(nv)         test_nvol_flag(nv, CaseSensitive)
  86. #define NVolSetCaseSensitive(nv)      set_nvol_flag(nv, CaseSensitive)
  87. #define NVolClearCaseSensitive(nv)    clear_nvol_flag(nv, CaseSensitive)
  88.  
  89. #define NVolLogFileEmpty(nv)         test_nvol_flag(nv, LogFileEmpty)
  90. #define NVolSetLogFileEmpty(nv)          set_nvol_flag(nv, LogFileEmpty)
  91. #define NVolClearLogFileEmpty(nv)    clear_nvol_flag(nv, LogFileEmpty)
  92.  
  93. /*
  94.  * NTFS version 1.1 and 1.2 are used by Windows NT4.
  95.  * NTFS version 2.x is used by Windows 2000 Beta
  96.  * NTFS version 3.0 is used by Windows 2000.
  97.  * NTFS version 3.1 is used by Windows XP, Windows Server 2003 and Longhorn.
  98.  */
  99.  
  100. #define NTFS_V1_1(major, minor) ((major) == 1 && (minor) == 1)
  101. #define NTFS_V1_2(major, minor) ((major) == 1 && (minor) == 2)
  102. #define NTFS_V2_X(major, minor) ((major) == 2)
  103. #define NTFS_V3_0(major, minor) ((major) == 3 && (minor) == 0)
  104. #define NTFS_V3_1(major, minor) ((major) == 3 && (minor) == 1)
  105.  
  106. #define NTFS_BUF_SIZE 8192
  107.  
  108. /*
  109.  * ntfs_volume - structure describing an open volume in memory
  110.  */
  111. struct _ntfs_volume {
  112.     union {
  113.         struct ntfs_device *dev;    /* NTFS device associated with
  114.                            the volume. */
  115.         void *sb;    /* For kernel porting compatibility. */
  116.     };
  117.     char *vol_name;        /* Name of the volume. */
  118.     unsigned long state;    /* NTFS specific flags describing this volume.
  119.                    See ntfs_volume_state_bits above. */
  120.  
  121.     ntfs_inode *vol_ni;    /* ntfs_inode structure for FILE_Volume. */
  122.     u8 major_ver;        /* Ntfs major version of volume. */
  123.     u8 minor_ver;        /* Ntfs minor version of volume. */
  124.     u16 flags;        /* Bit array of VOLUME_* flags. */
  125.  
  126.     u16 sector_size;    /* Byte size of a sector. */
  127.     u8 sector_size_bits;    /* Log(2) of the byte size of a sector. */
  128.     u32 cluster_size;    /* Byte size of a cluster. */
  129.     u32 mft_record_size;    /* Byte size of a mft record. */
  130.     u32 indx_record_size;    /* Byte size of a INDX record. */
  131.     u8 cluster_size_bits;    /* Log(2) of the byte size of a cluster. */
  132.     u8 mft_record_size_bits;/* Log(2) of the byte size of a mft record. */
  133.     u8 indx_record_size_bits;/* Log(2) of the byte size of a INDX record. */
  134.  
  135.     /* Variables used by the cluster and mft allocators. */
  136.     u8 mft_zone_multiplier;    /* Initial mft zone multiplier. */
  137.     s64 mft_data_pos;    /* Mft record number at which to allocate the
  138.                    next mft record. */
  139.     LCN mft_zone_start;    /* First cluster of the mft zone. */
  140.     LCN mft_zone_end;    /* First cluster beyond the mft zone. */
  141.     LCN mft_zone_pos;    /* Current position in the mft zone. */
  142.     LCN data1_zone_pos;    /* Current position in the first data zone. */
  143.     LCN data2_zone_pos;    /* Current position in the second data zone. */
  144.  
  145.     s64 nr_clusters;    /* Volume size in clusters, hence also the
  146.                    number of bits in lcn_bitmap. */
  147.     ntfs_inode *lcnbmp_ni;    /* ntfs_inode structure for FILE_Bitmap. */
  148.     ntfs_attr *lcnbmp_na;    /* ntfs_attr structure for the data attribute
  149.                    of FILE_Bitmap. Each bit represents a
  150.                    cluster on the volume, bit 0 representing
  151.                    lcn 0 and so on. A set bit means that the
  152.                    cluster and vice versa. */
  153.  
  154.     LCN mft_lcn;        /* Logical cluster number of the data attribute
  155.                    for FILE_MFT. */
  156.     ntfs_inode *mft_ni;    /* ntfs_inode structure for FILE_MFT. */
  157.     ntfs_attr *mft_na;    /* ntfs_attr structure for the data attribute
  158.                    of FILE_MFT. */
  159.     ntfs_attr *mftbmp_na;    /* ntfs_attr structure for the bitmap attribute
  160.                    of FILE_MFT. Each bit represents an mft
  161.                    record in the $DATA attribute, bit 0
  162.                    representing mft record 0 and so on. A set
  163.                    bit means that the mft record is in use and
  164.                    vice versa. */
  165.  
  166.     int mftmirr_size;    /* Size of the FILE_MFTMirr in mft records. */
  167.     LCN mftmirr_lcn;    /* Logical cluster number of the data attribute
  168.                    for FILE_MFTMirr. */
  169.     ntfs_inode *mftmirr_ni;    /* ntfs_inode structure for FILE_MFTMirr. */
  170.     ntfs_attr *mftmirr_na;    /* ntfs_attr structure for the data attribute
  171.                    of FILE_MFTMirr. */
  172.  
  173.     ntfschar *upcase;    /* Upper case equivalents of all 65536 2-byte
  174.                    Unicode characters. Obtained from
  175.                    FILE_UpCase. */
  176.     u32 upcase_len;        /* Length in Unicode characters of the upcase
  177.                    table. */
  178.  
  179.     ATTR_DEF *attrdef;    /* Attribute definitions. Obtained from
  180.                    FILE_AttrDef. */
  181.     s32 attrdef_len;    /* Size of the attribute definition table in
  182.                    bytes. */
  183.  
  184.     void *private_data;    /* Temp: for directory handling */
  185.     void *private_bmp1;
  186.     void *private_bmp2;
  187. };
  188.  
  189. extern ntfs_volume *ntfs_volume_alloc(void);
  190.  
  191. extern ntfs_volume *ntfs_volume_startup(struct ntfs_device *dev,
  192.         unsigned long rwflag);
  193.  
  194. extern ntfs_volume *ntfs_device_mount(struct ntfs_device *dev,
  195.         unsigned long rwflag);
  196. extern int ntfs_device_umount(ntfs_volume *vol, const BOOL force);
  197.  
  198. extern ntfs_volume *ntfs_mount(const char *name, unsigned long rwflag);
  199. extern int ntfs_umount(ntfs_volume *vol, const BOOL force);
  200.  
  201. extern int ntfs_version_is_supported(ntfs_volume *vol);
  202. extern int ntfs_logfile_reset(ntfs_volume *vol);
  203.  
  204. extern int ntfs_volume_write_flags(ntfs_volume *v, const u16 flags);
  205.  
  206. #endif /* defined _NTFS_VOLUME_H */
  207.  
  208.